# Docker 环境配置
# 包含 Docker 服务管理与别名

# ========== Docker 配置 ==========
# Docker 状态和管理函数

# 检查 Docker 是否已安装
function docker-check-install() {
  if command -v docker >/dev/null 2>&1; then
    log_docker "$(docker --version)"
    return 0
  else
    log_error "Docker 未安装，请先安装 Docker Desktop for Mac"
    log_info "安装链接: https://docs.docker.com/desktop/install/mac-install/"
    return 1
  fi
}

# Docker 服务启动
function docker-start() {
  if ! docker-check-install; then
    return 1
  fi
  
  if pgrep "com.docker.backend" > /dev/null || pgrep "com.docker.helper" > /dev/null; then
    log_info "Docker 已运行"
  else
    log_info "启动 Docker 服务..."
    open -a Docker
    log_info "正在等待 Docker 启动完成..."
    until docker ps > /dev/null 2>&1; do
      echo -n "."
      sleep 2
    done
    log_success "Docker 已启动"
  fi
}

# Docker 服务停止
function docker-stop() {
  if ! docker-check-install; then
    return 1
  fi
  
  if pgrep "com.docker.backend" > /dev/null || pgrep "com.docker.helper" > /dev/null; then
    log_info "停止 Docker 服务..."
    osascript -e 'quit app "Docker"'
    log_success "Docker 已停止"
  else
    log_info "Docker 未运行"
  fi
}

# Docker 状态
function docker-status() {
  if ! docker-check-install; then
    return 1
  fi
  
  if pgrep "com.docker.backend" > /dev/null || pgrep "com.docker.helper" > /dev/null; then
    log_running "Docker"
    log_subheader "正在运行的容器"
    docker ps
    log_subheader "Docker 信息"
    docker info | grep -E 'Server Version|Containers|Images|Memory|CPU'
  else
    log_stopped "Docker"
  fi
}

# Docker 重启
function docker-restart() {
  docker-stop
  sleep 2
  docker-start
}

# ========== Docker Compose 便捷函数 ==========

# 列出当前目录的 docker-compose 服务
function dcomp-list() {
  if [ -f "docker-compose.yml" ]; then
    log_header "当前目录 docker-compose 服务列表"
    docker-compose config --services
  else
    log_warning "当前目录没有 docker-compose.yml 文件"
  fi
}

# 启动特定服务或所有服务
function dcomp-up() {
  if [ -f "docker-compose.yml" ]; then
    if [ "$1" ]; then
      log_info "启动服务: $1"
      docker-compose up -d $1
    else
      log_info "启动所有服务"
      docker-compose up -d
    fi
  else
    log_warning "当前目录没有 docker-compose.yml 文件"
  fi
}

# 停止特定服务或所有服务
function dcomp-down() {
  if [ -f "docker-compose.yml" ]; then
    if [ "$1" ]; then
      log_info "停止服务: $1"
      docker-compose stop $1
    else
      log_info "停止所有服务"
      docker-compose down
    fi
  else
    log_warning "当前目录没有 docker-compose.yml 文件"
  fi
}

# 查看容器日志
function dcomp-logs() {
  if [ -f "docker-compose.yml" ]; then
    if [ "$1" ]; then
      log_info "查看服务日志: $1"
      docker-compose logs -f $1
    else
      log_warning "请指定要查看日志的服务名称"
      dcomp-list
    fi
  else
    log_warning "当前目录没有 docker-compose.yml 文件"
  fi
}

# ========== Docker 常用别名 ==========
alias dk="docker"
alias dki="docker images"
alias dkps="docker ps"
alias dkst="docker-status"
alias dkr="docker-restart"
alias docker-paths="log_docker_paths"

# Docker Compose 别名
alias dc="docker-compose"
alias dcl="dcomp-list"
alias dcu="dcomp-up"
alias dcd="dcomp-down"
alias dclog="dcomp-logs"

# ========== 通用服务管理 ==========
# 这些函数需要 db_env.zsh 中的数据库函数

# 启动所有服务 (包括数据库和Docker)
function start_all_services() {
  log_header "启动所有服务"
  
  # 启动数据库服务
  if typeset -f mongo-start > /dev/null; then
    mongo-start
  fi
  
  if typeset -f redis-start > /dev/null; then
    redis-start
  fi
  
  if typeset -f mysql-start > /dev/null; then
    mysql-start
  fi
  
  # 启动Docker
  docker-start
  
  # 显示状态
  log_header "所有服务状态"
  if typeset -f check_db_status > /dev/null; then
    check_db_status
  fi
  
  log_subheader "Docker"
  docker-status
}

# 停止所有服务
function stop_all_services() {
  log_header "停止所有服务"
  
  # 停止数据库服务
  if typeset -f mongo-stop > /dev/null; then
    mongo-stop
  fi
  
  if typeset -f redis-stop > /dev/null; then
    redis-stop
  fi
  
  if typeset -f mysql-stop > /dev/null; then
    mysql-stop
  fi
  
  # 停止Docker
  docker-stop
  
  # 显示状态
  log_header "所有服务状态"
  if typeset -f check_db_status > /dev/null; then
    check_db_status
  fi
  
  log_subheader "Docker"
  docker-status
}

# 服务别名
alias srv-start="start_all_services"
alias srv-stop="stop_all_services"
alias srv-status="if typeset -f check_db_status > /dev/null; then check_db_status; fi; log_subheader 'Docker'; docker-status"

# 当加载此文件时显示 Docker 已添加
log_success "Docker 环境已加载" 